package com.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.junit.Test;

/**
 * @author :  yulei
 * @data :  2018/5/22 20:07
 * @Version :  1.0
 **/

public class DateUtil {

    /**
     *获取当前时间，保存到数据库
     * @return
     */
    public static Date getCurrentTime() {

        Date date = new  Date();//获得系统时间.
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String nowTime = sdf.format(date);
        Date time = null;
        try {
            time = sdf.parse(nowTime);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return time;
    }

    /**
     * 获取日期字符串
     * @return
     */
    public static String getDateTimeStr(){
        Date date = new  Date();//获得系统时间.
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //日期字符串，样例:20180524144539
        String nowTime = sdf.format(date).replaceAll("[[\\s-:punct:]]","");
        return  nowTime;
    }

    /**
    <blockquote>
    <h1>将毫秒数按照指定的格式格式化为日期类型的字符串</h1>
    <h1>异常情况如下：</h1>
    <ul>
        <li>当mill和format都为为null时返回当前时间的yyyy-MM-dd HH:mm:ss格式化类型</li>
    	<li>当mill为null时返回当前时间的format格式化类型</li>
    	<li>当format为null时返回mill的yyyy-MM-dd HH:mm:ss格式化类型</li>
    	<li>当format不能解析为格式化字符串时返回mill的yyyy-MM-dd HH:mm:ss格式化类型</li>
    </ul>
    * @version 1.0.0
    * @param mill - 毫秒
    * @param format - 格式,如：(yyyy-MM-dd HH:mm:ss)
    * @return - 格式化后的时间
     */
    public static String getDateStrIsMillisecond(Long mill,String format)
    {
    	
    	//判断mill是否为空
    	Date date=new Date();
    	SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    	date.setTime(mill==null?new Date().getTime():mill);
    	//判断format是否为空
    	try
    	{
    		dateFormat=new SimpleDateFormat(format!=null?format:"yyyy-MM-dd HH:mm:ss");
    		return dateFormat.format(date);
    	}
    	catch (IllegalArgumentException e) 
  		{//捕获格式错误异常
  			e.printStackTrace();
  			return dateFormat.format(date);
  		}
    }
    
    /**
    <blockquote>
    <h1>将时间类型的字符串按照指定的格式转化为格式化后的日期字符串</h1>
    <h1>异常情况如下：</h1>
    <ul>
        <li>当timeStr和timeFormat都为为null时返回当前时间的yyyy-MM-dd HH:mm:ss格式化类型</li>
    	<li>当timeStr为null时返回当前时间的timeFormat格式化类型</li>
    	<li>当timeFormat为null时返回mill的yyyy-MM-dd HH:mm:ss格式化类型</li>
    	<li>当timeFormat不能解析为格式化字符串时返回timeStr的yyyy-MM-dd HH:mm:ss格式化类型</li>
    	<li>当timeStr不能解析为日期字符串时返回当前时间的timeFormat格式化类型</li>
    	<li>当timeStr和timeFormat都不能解析时返回当前时间的yyyy-MM-dd HH:mm:ss格式化类型</li>
    </ul>
    * @version 1.0.0
    * @param timeStr - 要转化为Date类型的字符串。
    * @param timeFormat - 格式日期的字符串，例如yyyy-MM-dd(获取年月日)。
    * @return
    */
     public static String getDateStrIsStrDate(String timeStr, String timeFormat)
     {//将时间类型的字符串按照指定的格式转化为格式化后的日期字符串
    	 SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  	   try
  	   {
  		 dateFormat=new SimpleDateFormat(timeFormat!=null?timeFormat:"yyyy-MM-dd HH:mm:ss");
  		 Date date=dateFormat.parse(timeStr!=null?timeStr:new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
  		 return dateFormat.format(date);
  	   }
  		catch (IllegalArgumentException e) 
  		{//捕获格式错误异常
  			e.printStackTrace();
  			return dateFormat.format(new Date());
  		}catch (ParseException e)
  		{
  			e.printStackTrace();
  			return dateFormat.format(new Date());
  		}
      }
    public static void main(String[] args) {

        Date date = new  Date();//获得系统时间.
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String nowTime = sdf.format(date).replaceAll("[[\\s-:punct:]]","");
        System.out.println(nowTime);
    }



}
